package club.service.impl;

import club.dao.PetMapper;
import club.pojo.Pet;
import club.service.PetService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.mapper.EntityWrapper;

import javax.annotation.Resource;
import java.util.List;

@Service
@Transactional
public class PetServiceImpl implements PetService {

    @Resource
    private PetMapper petMapper; // 注入PetMapper，用于数据库操作

    /**
     * 分页查询所有宠物信息
     * @param pageNum 当前页码
     * @param pageSize 每页显示条数
     * @return 分页后的宠物信息列表
     */
    @Override
    public PageInfo<Pet> pets(Integer pageNum, Integer pageSize) {
        // 使用PageHelper进行分页设置
        PageHelper.startPage(pageNum, pageSize);
        // 查询所有宠物列表
        List<Pet> pets = petMapper.selectList(null);
        // 封装为分页对象，设置导航页数
        PageInfo<Pet> pageInfo = new PageInfo<>(pets, 3);
        return pageInfo;
    }

    /**
     * 根据宠物ID查询宠物信息
     * @param id 宠物ID
     * @return 对应ID的宠物信息，若不存在则返回null
     */
    @Override
    public Pet findById(Integer id) {
        // 根据ID查询宠物信息
        return petMapper.selectById(id);
    }

    /**
     * 创建新的宠物信息
     * @param pet 待创建的宠物对象
     * @return 插入操作影响的行数，通常为1
     */
    @Override
    public Integer create(Pet pet) {
        // 执行插入操作
        return petMapper.insert(pet);
    }

    /**
     * 查询所有宠物信息（分页），可以根据宠物类型模糊查询
     * @param petType 宠物类型，用于模糊查询
     * @param pageNum 当前页码
     * @param pageSize 每页显示条数
     * @return 分页后的宠物信息列表
     */
    @Override
    public PageInfo<Pet> allPet(String petType, Integer pageNum, Integer pageSize) {
        // 使用PageHelper进行分页设置
        PageHelper.startPage(pageNum, pageSize);
        // 构建查询条件
        EntityWrapper<Pet> wrapper = new EntityWrapper<>();
        if (petType != null && !"".equals(petType)) {
            wrapper.like("petType", petType);
        }
        // 查询符合条件的宠物列表
        List<Pet> pets = petMapper.selectList(wrapper);
        // 封装为分页对象，设置导航页数
        PageInfo<Pet> pageInfo = new PageInfo<>(pets, 3);
        return pageInfo;
    }

    /**
     * 添加新的宠物信息
     * @param pet 待添加的宠物对象
     * @return 插入操作影响的行数，通常为1
     */
    @Override
    public int add(Pet pet) {
        // 执行插入操作
        return petMapper.insert(pet);
    }

    /**
     * 更新宠物信息
     * @param pet 待更新的宠物对象
     * @return 更新操作影响的行数，通常为1
     */
    @Override
    public int update(Pet pet) {
        // 执行更新操作
        return petMapper.updateById(pet);
    }

    /**
     * 删除指定ID的宠物信息
     * @param id 待删除宠物的ID
     * @return 删除操作影响的行数，通常为1
     */
    @Override
    public int del(Integer id) {
        // 执行删除操作
        return petMapper.deleteById(id);
    }
}